////拷贝构造函数被调用的时间点
//#include <iostream>
//#include <cstring>
//
//using namespace std;
//
//class Human {
//public:
//
//    Human(int age = 0, const char *name = "匿名") {
//    }
//
//    //自定义拷贝构造函数
//    Human(const Human &that) {
//        cout << "Human类的拷贝函数被调用" << endl;
//        m_age = that.m_age;
//        m_name = that.m_name;
//    }
//
//    void getInfo() {
//        cout << "姓名" << this->m_name << "年龄:" << this->m_age << endl;
//    }
//
//private:
//    int m_age;//基本类型的成员变量
//    string m_name;//类类型的成员变量
//};
//
//void foo(Human v) {
//
//}
//
//Human bar() {
//    Human m;
//    return m;
//}
//
//int main(void) {
//    Human h2(22, "张飞");//定义h2,利用h2.Human(22,"张飞");
//
//    Human h3(h2);//=h2；的定义h3,利用h3.Human(h2)-->触发拷贝构造函数（1）
//    h3.getInfo();
//
//    foo(h3);//-->触发拷贝构造函数(2)
////    Human h4 = bar();//-->触发两次拷贝构造函数 -fno-elide-constructors
//
//    Human h5[3] = {Human(22,"张飞"),Human(20,"赵云"),Human(25,"关羽")};
//    bar();
//    return 0;
//}
//
